import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class ConjuntoInformacao {

	private Set<Informacao> elementos = new HashSet<Informacao>();
	private Iterator<Informacao> it;

	public void adicionarInformacao(Informacao info) {
		elementos.add(info);
	}

	public Set<String> obterValores() {
		Set<String> valores = new HashSet<String>();
		for (Informacao componente : elementos)
			valores.add(componente.retornaValor());
		return valores;
	}

	public static ConjuntoInformacao obterConjuntoArmas() {
		ConjuntoInformacao conjuntoArmas = new ConjuntoInformacao();

		for (ArmaValor valor : ArmaValor.values()) {
			conjuntoArmas.adicionarInformacao(new Arma(valor.toString()));
		}

		return conjuntoArmas;
	}

	public static ConjuntoInformacao obterConjuntoPaises() {
		ConjuntoInformacao conjuntoPaises = new ConjuntoInformacao();

		for (PaisValor valor : PaisValor.values()) {
			conjuntoPaises.adicionarInformacao(new Pais(valor.toString()));
		}

		return conjuntoPaises;
	}

	public static ConjuntoInformacao obterConjuntoPersonagens() {
		ConjuntoInformacao conjuntoPersonagens = new ConjuntoInformacao();

		for (PersonagemValor valor : PersonagemValor.values()) {
			conjuntoPersonagens.adicionarInformacao(new Personagem(valor.toString()));
		}

		return conjuntoPersonagens;
	}

	public boolean existeArma(String valor) {
		for (Informacao item : elementos) {
			if (item.possuiValor(valor) && item instanceof Arma) {
				return true;
			}
		}
		return false;
	}

	public boolean existePais(String valor) {
		for (Informacao item : elementos) {
			if (item.possuiValor(valor) && item instanceof Pais) {
				return true;
			}
		}
		return false;
	}

	public boolean existePersonagem(String valor) {
		for (Informacao item : elementos) {
			if (item.possuiValor(valor) && item instanceof Personagem) {
				return true;
			}
		}
		return false;
	}

	public Informacao obterInformacao(String valor) {
		for (Informacao item : elementos) {
			if (item.possuiValor(valor))
				return item;
		}
		return null;
	}

	public void incialisarIterador() {
		it = elementos.iterator();
	}

	public boolean possuiProximo() {
		return it.hasNext();
	}

	public Informacao obterProximo() {
		return it.next();
	}

	public void incluir(Informacao elemento) {
		elementos.add(elemento);
	}

	@Override
	public String toString() {
		return elementos.toString();
	}

}
